/**
 * 请求类型定义
 * 
 * 注意：这个文件主要用于类型文档，实际上JavaScript不会使用这些类型。
 * 在TypeScript项目中，这些类型可以实际用于类型检查。
 */

/**
 * 请求配置对象
 * @typedef {Object} RequestConfig
 * @property {string} url - 请求URL
 * @property {string} [method] - 请求方法，默认为 'GET'
 * @property {Object} [headers] - 请求头
 * @property {Object} [params] - 查询参数
 * @property {any} [data] - 请求体数据
 * @property {number} [timeout] - 超时时间（毫秒）
 * @property {string} [responseType] - 响应类型：'json', 'text', 'arraybuffer'
 * @property {Object} [retry] - 重试配置
 * @property {number} [retry.maxRetries] - 最大重试次数
 * @property {number} [retry.retryDelay] - 重试延迟（毫秒）
 * @property {number[]} [retry.retryableStatusCodes] - 可重试的状态码
 * @property {number} [priority] - 请求优先级：0（最高）到 2（最低）
 * @property {string} [requestId] - 请求ID，用于取消请求
 * @property {boolean} [loading] - 是否显示加载指示器
 * @property {string} [loadingText] - 加载文本
 * @property {Function} [onUploadProgress] - 上传进度回调
 * @property {Function} [onDownloadProgress] - 下载进度回调
 * @property {Function} [validateStatus] - 验证响应状态的函数
 * @property {AbortSignal} [signal] - 用于取消请求的信号
 */

/**
 * 响应对象
 * @typedef {Object} Response
 * @property {any} data - 响应数据
 * @property {number} status - 响应状态码
 * @property {string} statusText - 响应状态文本
 * @property {Object} headers - 响应头
 * @property {Object} config - 请求配置
 * @property {Request} request - 请求对象
 */

/**
 * GraphQL请求选项
 * @typedef {Object} GraphQLOptions
 * @property {string} query - GraphQL查询语句
 * @property {Object} [variables] - 查询变量
 * @property {string} [operationName] - 操作名称
 * @property {Object} [extensions] - 扩展信息
 * @property {Object} [context] - 上下文信息
 * @property {number} [priority] - 请求优先级
 * @property {boolean} [loading] - 是否显示加载指示器
 * @property {Object} [headers] - 请求头
 */

/**
 * 请求队列选项
 * @typedef {Object} QueueOptions
 * @property {number} [maxConcurrent] - 最大并发请求数
 * @property {number} [priorityLevels] - 优先级级别数
 * @property {number} [timeout] - 队列请求超时时间（毫秒）
 */

/**
 * 请求任务选项
 * @typedef {Object} RequestTaskOptions
 * @property {number} [priority] - 请求优先级
 * @property {string} [requestId] - 请求ID
 * @property {number} [timeout] - 超时时间（毫秒）
 */

/**
 * 错误状态
 * @typedef {Object} ErrorStatus
 * @property {string} url - 请求URL
 * @property {string} method - 请求方法
 * @property {number} status - 状态码
 * @property {string} message - 错误消息
 * @property {number} timestamp - 时间戳
 */

/**
 * 网络状态
 * @typedef {Object} NetworkStatus
 * @property {boolean} online - 是否在线
 * @property {string} type - 网络类型：'wifi', 'cellular', 'unknown'
 * @property {number} [downlink] - 下载速度（Mbps）
 * @property {number} [rtt] - 往返时间（ms）
 */

/**
 * 请求适配器接口
 * @interface RequestAdapter
 * @property {Function} request - 发送请求的方法
 * @property {Function} setConfig - 设置配置的方法
 */

/**
 * 未导出的类型，仅用于文档
 */
const types = {
  RequestConfig: {},
  Response: {},
  GraphQLOptions: {},
  QueueOptions: {},
  RequestTaskOptions: {},
  ErrorStatus: {},
  NetworkStatus: {},
  RequestAdapter: {}
};

/**
 * 导出请求配置类型供JSDoc使用
 */
export const RequestConfig = types.RequestConfig;

/**
 * 导出响应类型供JSDoc使用
 */
export const Response = types.Response;

/**
 * 导出GraphQL选项类型供JSDoc使用
 */
export const GraphQLOptions = types.GraphQLOptions; 